#ifndef IGSLIB_IDIP_SWITCH_H
#define IGSLIB_IDIP_SWITCH_H
#include <vector>
#include <string>
#include "igslib_common_use.h"
#include "igslib_iserial_manager.h"

namespace igslib
{	
    struct IDipSwitch:public IComponent
    {
        /*!
         * 取得指撥器腳位狀態。
         * @param a0 腳位索引。
         * @return true表示為ON。
         */
        virtual bool GetPinState(const int&)=0;
        /*!
         * 設定指撥器腳位狀態。
         * @param a0 腳位索引。
         * @param a1 腳位狀態。
         * @note 主要是模擬用。
         */
        virtual void SetPinState(const int&, const bool&)=0;
        /*!
         * 直接用數值設定指撥器腳位狀態。
         * @param a0 數值。
         * @note 主要是模擬用。
         */
        virtual void SetPinStateWithValue(const int&)=0;
        /*!
         * 設定所有指撥器腳位狀態。
         * @param a0 所有腳位狀態。
         * @note 主要是模擬用。
         */
        virtual void SetPinsState(const std::vector<bool>&)=0;
        /*!
         * 取得指撥器所有腳位狀態。
         * @return 所有腳位狀態。
         */
        virtual std::vector<bool> GetPinsState()=0;
        /*!
         * 取得整個指撥開關狀態的字串，例如"01001101"這樣的字串。
         * @return 整個指撥開關狀態的字串。
         */
        virtual std::string GetStateString() = 0;
        /*!
         * 取得整個指撥開關狀態的數值，例如"01001101"的指撥開關狀態應該要回傳77。
         * @return 數值。
         */
        virtual int GetPinStateValue()=0;
        /*!
         * 若實作是使用SPI通訊介面，用此函式輸入SPI的實作。
         * @param a0 SPI的實作。
         */
        virtual void SetSPI(ISpi*)=0;
    };
	struct IDipSwitchManager:public IManager<IDipSwitch*>
	{
        /*!
         * @return 創建出來的指撥器。
         */
        //virtual IDipSwitch* NewM01DipSwitch()=0;
		
		/*!
         * 創建MH主板上根據專案特規實作MCU UART資源。
         * @param a0 專案名。
         * @return MCU端 IDipSwitch 介面
         * @note
         *     目前已實作專案名對照如下：
         *     "DragonBallRace"：龍珠賽球
         */	 
        virtual IDipSwitch* New_ProjMCU(const std::string&)=0;	
		
		
	};
};

extern "C"{
    igslib::IDipSwitchManager* GetDipSwitchManagerInstance();
};
#endif
